from Clases.AlgoritoAjuste import AlgoritoAjuste

class MejorAjuste(AlgoritoAjuste):
    pass

    def guardarEnMemoria(self,pid,listaInstrucciones,asignacion):
        lista = self.listaEspaciosLibres()
        contador = 0
        bloqueMejorTamano = self.mejorDeLista(lista)
        pudoGuardar = False
        
        if bloqueMejorTamano >= len(listaInstrucciones): #esta comprobacion esta porque en caso de que no haya ningun bloque 
            
            
            #que pueda satisfacer nos retornatia un bloque con un valor menor al del tamanio de la lista.
           
            
            while not len(lista)== contador and not pudoGuardar:
                
                    if lista[contador] ==  bloqueMejorTamano:
                        pudoGuardar = True
                        asignacion.agregarDireccionBase(pid,self.dameDirBase(contador,self.getBloquesLibres()))
                        self.guardar(self.bloquesLibres[contador],listaInstrucciones) 
                        #self.bloquesLibres[contador] deberia retornarme
                        # el bloque libre que cumple la condicion de guardar la lista de instrucciones
                    else:
                        contador +=1
        return pudoGuardar
    
    #parcial con lista vacia o con valores negativos.
    def mejorDeLista(self,lista): #recibe una lista de numeros.
        mejor=lista[0]
        puntero= 1
        while len(lista) > puntero:
            if mejor > lista[puntero] >= len(lista): #si el mejor es mayor q mayor q el actual y el actual es mayor o igual
                                                    # que el tamanio de la lista entonces queda como mejor el actual.
                mejor = lista[puntero]
            puntero+=1
        return mejor